package com.campusbackend.service;

import com.campusbackend.entity.Students;
import com.campusbackend.entity.vo.StudentBasicInfoUpdateVO;
import com.campusbackend.entity.vo.StudentRegisterVO;
import com.campusbackend.entity.vo.StudentInfoVO;
import com.baomidou.mybatisplus.extension.service.IService;

import java.util.List;

/**
 * <p>
 * 学生用户表 服务类
 * </p>
 *
 * @author yezi
 * @since 2025-07-24
 */
public interface StudentsService extends IService<Students> {

    /**
     * 根据学号查找学生
     * @param studentId 学号
     * @return 学生信息
     */
    Students findByStudentId(String studentId);

    /**
     * 智能推荐学生（随机查询8名符合条件的学生）
     * @param college 学院
     * @return 学生列表
     */
    List<Students> recommendStudents(String college);

    /**
     * 精准搜索学生
     * @param college 学院
     * @param keyword 关键词（姓名或学号）
     * @return 学生列表
     */
    List<Students> searchStudents(String college, String keyword);

    /**
     * 学生注册
     * @param registerVO 注册信息
     * @return 注册结果消息
     */
    String registerStudent(StudentRegisterVO registerVO);

    /**
     * 检查学号是否已存在
     * @param studentId 学号
     * @return true-已存在，false-不存在
     */
    boolean isStudentIdExists(String studentId);

    /**
     * 检查邮箱是否已存在
     * @param email 邮箱
     * @return true-已存在，false-不存在
     */
    boolean isEmailExists(String email);

    /**
     * 检查邮箱是否被其他学生占用（排除当前学生）
     * @param email 邮箱
     * @param studentId 当前学生学号
     * @return true-已被占用，false-未被占用
     */
    boolean isEmailExistsExcludeCurrentUser(String email, String studentId);

    /**
     * 获取学生综合信息（包含基本信息、队伍列表、技能列表）
     * @param studentId 学生ID
     * @return 学生综合信息
     */
    StudentInfoVO getStudentInfo(Long studentId);

    /**
     * 更新学生基本信息
     * @param studentId 学号
     * @param updateVO 更新信息
     * @return 更新结果消息
     */
    String updateBasicInfo(String studentId, StudentBasicInfoUpdateVO updateVO);

    /**
     * 检查手机号是否被其他学生占用（排除当前学生）
     * @param phone 手机号
     * @param studentId 当前学生学号
     * @return true-已被占用，false-未被占用
     */
    boolean isPhoneExistsExcludeCurrentUser(String phone, String studentId);

    /**
     * 检查身份证号是否被其他学生占用（排除当前学生）
     * @param idCard 身份证号
     * @param studentId 当前学生学号
     * @return true-已被占用，false-未被占用
     */
    boolean isIdCardExistsExcludeCurrentUser(String idCard, String studentId);
}
